package com.springboot.demo.design.pattern.request;

import com.springboot.common.entity.request.Parameter;
import com.springboot.common.entity.request.ParameterBody;
import com.springboot.common.util.StringUtil;

/**
 * 参数构建者
 *
 * @author supu
 * @date 2019-03-19 13:28
 **/
public class ParameterBuilder<T extends ParameterBody> {
    /**
     * 参数对象
     */
    private T data;
    /**
     * ip地址
     */
    private String ip;
    /**
     * 请求唯一序列号
     */
    private String serialId;

    public ParameterBuilder<T> setData(T data) {
        this.data = data;
        return this;
    }

    public ParameterBuilder<T> setIp(String ip) {
        this.ip = ip;
        return this;
    }

    public ParameterBuilder<T> setSerialId(String serialId) {
        this.serialId = serialId;
        return this;
    }

    public Parameter<T> build(){
        Parameter<T> parameter = new Parameter<>();
        parameter.setData(data);
        parameter.setIp(ip);
        parameter.setSerialId(StringUtil.isEmpty(serialId) ? StringUtil.getSerialId() : serialId);
        return parameter;
    }
}
